One or more aspects relate, in general, to processing within a computing environment, and in particular, to optimizing such processing.
Opportunities to improve the operation of computer systems are provided by a number of code rewriting techniques. For example, code rewriting may be used to modify binaries to avoid known hardware errors. In other examples, existing code may be modified to improve performance by re-optimizing hot regions, either from binary code, or from additional internal representation formats stored by the static compiler that allow code to be re-optimized without decompiling the binary code.
Various offline optimizers have been used to rewrite code. These optimizers modify the actual binary, making self-referential programs, including those that compute checksums of their own code to validate correctness, fail. These offline optimizers also depend on obtaining workload statistics.
Other optimization techniques, such as dynamic code optimization, also rewrite code. These techniques, however, recompile code dynamically and store the newly generated code in its entirety in locations different from the original code to preserve such self-referential behavior.